
"""
使用类名()创建对象时, 解析器会首先调用__new__方法
1. 对象分配空间
2. 返回对象的引用
3. python解释器将获取的对象的引用, 作为第一个参数传递给__init__方法
"""

class Person:
    # 定义类属性记录单利对象引用
    instance = None

    # 标记是否执行过初始化方法
    init_flag = False

    def __new__(cls, *args, **kwargs):
        # 判断属性是否已经赋值
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        # 返回类属性的单例引用
        return cls.instance

    def __init__(self):
        if not Person.init_flag:
            print("初始化")
            Person.init_flag = True

""""
每次类名(), 解释器会自动调用两个方法__new__和__init__
上面我们对__new__方法改造了, 但是每次__init__还是会被再次调用, 哪怎么让__init__只执行一次?
解决办法:
定义一个init_flag标记是否执行过
"""





